\section{9. Domænemodeller og Domain Driven Design }

\begin{center}
\line(1,0){500}
\end{center}

\begin{itemize}
\item Hvad er en domænemodel?
\item Hvad bruges domænemodeller til? 
\item Hvilke metoder kan man bruge til at finde de konceptuelle klasser? 
\item Redegør for begrebet Domain Driven Design.
\end{itemize}
\begin{center}
\line(1,0){500}
\end{center}

\subsubsection{Domænemodel}
\begin{itemize}
    \item Visualisering af koncepter fra den virkelige verden
    \item "Visual dictionary", UML notation
    \item IKKE et billede af software klasser
    \item Også kaldet: Conceptual Models, Domain Object Models, Analysis Object Models, Domain Class Models
\end{itemize}
\subsubsection{Hvad bruges domænemodeller til?}
\begin{itemize}
    \item Identifikation, relation og visualisering af vigtig information
    \item En domæne model er ofte mere fast end en software baseret model, domænet ændres ikke 
    \item Inspiration til software klasser og navne
    \begin{itemize}
         \item Reducerer "representational gap"
     \end{itemize} 
     \item Understøtter grundidéen i OOP\\
     \begin{center}
     \includegraphics[scale=0.8]{9-domainmodel}     
     \end{center}
\end{itemize}
\subsubsection{Metoder til at finde konceptuelle klasser}
\begin{itemize}
    \item Overspecifikation(Masser af små konceptuelle klasser) er bedre end underspecifikation 
    \item Find klasser så hurtigt som muligt
    \item Rene behavioral klasser(ingen attributter) må gerne indgå
    \item \textbf{Metoder}
    \begin{itemize}
        \item "Find navneordene", “Abbott” Analysis; AKA Linguistic Analysis 
        \begin{itemize}
            \item Kan gøres ud fra en krav-spec/use-cases
            \item Skrives på en liste og markeres som:
            \begin{itemize}
                \item Gode/rigtige objekter/klasser (K) 
                \item Aktører (A)
                \item Uinteressante objekter/klasser (U) 
                \item Attributter for objekter (Att)
            \end{itemize}
        \end{itemize}
        \item Candidate lists
        \item Books: Analysis Pattern, Data Model Patterns
    \end{itemize}    
    \item \textbf{UML:}
    \begin{itemize}
        \item Association: reading arrow - hvilken retning læses
        \item Multiplicitet som normalt
        \item Associationer for kun de vigtigste forhold
        \item Vis kun simple attributter
        \item Visualiser forhold som association, ikke som attribut
    \end{itemize}
    \item \textbf{9 objekt identifikations strategier}
    \begin{enumerate}
        \item Identificer kausale (årsags) objekter
        \begin{itemize}
            \item Udfører aktioner
        \end{itemize}
        \item Identificer services (passive objekter)
        \begin{itemize}
            \item simpel sensor, A/D converter, Printer
        \end{itemize}
        \item Identificer real-world items
        \begin{itemize}
            \item Navn, cpr-nr etc
        \end{itemize}
        \item Identificer fysiske enheder
        \item Identificer nøgle begreber (key koncepts)
        \begin{itemize}
             \item Nøgle begreber i domænet
         \end{itemize} 
        \item Identificer transaktioner
        \item Identificer persistent information 
        \item Identificer visuelle elementer
        \begin{itemize}
             \item (G)UI elementer
         \end{itemize} 
        \item Identificer kontrol elementer
        \begin{itemize}
            \item f.eks. PID kontroller
        \end{itemize}
    \end{enumerate}    
    \item Ikke alle benyttes på en gang, der udvælges f.eks 3-4 passende til domænet    
\end{itemize}
\subsubsection{DDD}
\begin{itemize}
	\item \textbf{Nøgleord}
	\begin{itemize}
	    \item Domæne 
	    \item Model - Et system af abstraktioner der beskriver dele af domænet (UML)
	    \item Ubiquitous Language - Et sprog der er baseret på domænet som benyttes af alle involverede 
	    \item Context - Stedet hvor et ord har en speciel mening
	\end{itemize}
    \item Der benyttes en domæne ekspert som vejleder
\end{itemize}